Los cambios de datos rara vez llegan solos: una transferencia debe debitar una cuenta y acreditar otra, y un pedido debe reservar stock y registrar un pago. Si el sistema se detiene a mitad de camino, la base de datos queda describiendo un mundo que nunca existió. Una transacción es la respuesta de la base de datos a ese problema: una secuencia de una o más operaciones que la base de datos trata como una única unidad de trabajo indivisible.
Todo o nada
Dentro de una transacción, cada operación pertenece a un único resultado. La base de datos nunca expone un estado final en el que solo haya ocurrido parte de la transacción. La ilustración clásica es una transferencia entre dos cuentas bancarias: reducir el saldo de la cuenta de origen y luego aumentar el saldo de la cuenta de destino. Si solo se realizara el primer paso, el dinero desaparecería; si solo se realizara el segundo, el dinero aparecería de la nada. Envolver ambos pasos en una sola transacción elimina ambas posibilidades.
Esta garantía de todo o nada se denomina atomicidad. Commit es el acto que hace permanentes los cambios de la transacción; una transacción que nunca hace commit no deja rastro alguno. Durabilidad añade la pieza final: una vez que un commit ha retornado, el cambio sobrevive aunque la máquina pierda energía un instante después.
Una transacción es un límite
Ayuda a imaginar una transacción como un límite trazado alrededor de un grupo de sentencias. Antes del límite y después de él, los datos satisfacen las reglas que impone la estructura. Dentro del límite existen estados intermedios —una cuenta ya está debitada mientras que la otra aún no ha sido acreditada—, pero esos estados son privados de la transacción. Las sentencias posteriores en otras sesiones no los toman como la verdad.
Dos funciones a la vez
Por lo tanto, las transacciones cumplen dos funciones. La primera es el manejo de fallos: si el proceso se bloquea, la conexión se cae o una sentencia produce un error, la base de datos puede restaurar el estado que existía antes de que comenzara la transacción. La segunda es el control de visibilidad: mientras el trabajo está en curso, otros lectores quedan protegidos del resultado inacabado. Estas dos funciones están relacionadas pero no son idénticas: la atomicidad decide si los cambios se conservan, mientras que la visibilidad se rige por el aislamiento, la configuración que controla cuánto pueden ver entre sí las transacciones concurrentes.
